package com.xbongbong.pro.domain.entity;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.domain.entity.PaasStageEntity;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

/**
 * 备份阶段表
 * 
 * @author mingliang.cao
 * 
 * @date 2021-11-16
 */
@Getter
@Setter
public class StageRetainEntity implements Serializable {
    /**
     * 主键
     */
    private Long id;

    private String corpid;

    /**
     * 备份应用Id, 用来区别同公司同应用同表单的多次备份
     */
    private Long retainAppId;

    /**
     * 备份表单id
     */
    private Long retainFormId;

    /**
     * 备份表单saas标识
     */
    private Integer retainSaasMark;

    /**
     * 备份表单businessType
     */
    private Integer retainBusinessType;

    /**
     * 备份阶段流程id
     */
    private Long retainStageProcessId;

    /**
     * 备份阶段流程id
     */
    private Long retainStageId;

    /**
     * 阶段名称
     */
    private String name;

    /**
     * 阶段code
     */
    private String code;

    /**
     * 阶段进入比例
     */
    private Integer intoProportion;

    /**
     * 阶段跳出比例
     */
    private Integer outProportion;

    /**
     * 阶段类型【0普通流程阶段、1结束阶段-成功、2结束阶段-失败】
     */
    private Integer type;

    /**
     * 阶段是否启用（0不启用、1启用）
     */
    private Integer enable;

    /**
     * 阶段排序【sort值越大代表阶段越靠前】
     */
    private Integer sort;

    /**
     * 阶段停留限制【无时间限制、停留多少时间后超时】
     */
    private Integer stayLimit;

    /**
     * 阶段停留限制时长
     */
    private Integer stayLimitTime;

    /**
     * 阶段停留限制时长单位
     */
    private Integer stayLimitTimeUnit;
    /**
     * 超时预警颜色是否开启【0关闭、1打开】
     */
    private Integer enableStageWarningColor;
    /**
     * 超时预警颜色
     */
    private String stageWarningColor;
    /**
     * 推进人，空值代表所有人都允许推进
     */
    private JSONArray executor;

    /**
     * 进入条件
     * @see StageConditionPoJo
     */
    private String preConditions;

    /**
     * 是否允许跳过阶段（0不允许、1允许）
     */
    private Integer allowSkipStage;

    /**
     * 是否关联业务状态（0没有关联、1有关联）
     */
    private Integer openStatus;

    /**
     * 关联业务的哪个状态
     */
    private Integer businessRelatedStatus;

    /**
     * 特殊业务的特殊阶段的额外设置
     */
    private JSONObject extraSetting;

    /**
     * 是否允许重新激活阶段流程（0不允许、1允许）
     */
    private Integer allowReactive;

    /**
     * 允许重新激活阶段流程到哪些阶段
     */
    private JSONArray allowReactiveStage;

    /**
     * 该阶段是否是默认值（0不是、1是）
     */
    private Integer isDefault;

    /**
     * 是否必填任务完成后自动跳入下一阶段（0否、1是）
     */
    private Integer enableAutoJump;

    /**
     * 允许从普通阶段直接跳转到结束阶段（0不允许、1允许；默认允许）
     */
    private Integer enableJumpEnd;

    /**
     * 关联选项
     */
    private JSONArray linkOption;

    /**
     * 创建人
     */
    @Deprecated
    private String creatorId;

    /**
     * 创建时间
     */
    private Long addTime;

    /**
     * 更新时间
     */
    private Long updateTime;

    /**
     * 删除标记
     */
    private Integer del;

    /**
     * 是否允许新建合同，阶段自动跳转此阶段
     * 0 不允许
     * 1 允许
     * null
     */
    private Integer allowCreateContractSkipStage;

    public StageRetainEntity(){
        del = 0;
    }

    public StageRetainEntity(PaasStageEntity item, Integer retainSaasMark, Integer retainBusinessType, Long retainAppId) {
        this.corpid = item.getCorpid();
        this.retainAppId = retainAppId;
        this.retainFormId = item.getFormId();
        this.retainStageProcessId = item.getStageProcessId();
        this.retainStageId = item.getId();
        this.retainSaasMark = retainSaasMark;
        this.retainBusinessType = retainBusinessType;
        this.name = item.getName();
        this.code = item.getCode();
        this.intoProportion = item.getIntoProportion();
        this.outProportion = item.getOutProportion();
        this.type = item.getType();
        this.enable = item.getEnable();
        this.sort = item.getSort();
        this.stayLimit = item.getStayLimit();
        this.stayLimitTime = item.getStayLimitTime();
        this.stayLimitTimeUnit = item.getStayLimitTimeUnit();
        this.enableStageWarningColor = item.getEnableStageWarningColor();
        this.stageWarningColor = item.getStageWarningColor();
        this.executor = item.getExecutor();
        this.preConditions = item.getPreConditions();
        this.allowSkipStage = item.getAllowSkipStage();
        this.openStatus = item.getOpenStatus();
        this.businessRelatedStatus = item.getBusinessRelatedStatus();
        this.extraSetting = item.getExtraSetting();
        this.allowReactive = item.getAllowReactive();
        this.allowReactiveStage = item.getAllowReactiveStage();
        this.isDefault = item.getIsDefault();
        this.enableAutoJump = item.getEnableAutoJump();
        this.enableJumpEnd = item.getEnableJumpEnd();
        this.linkOption = item.getLinkOption();
//        this.creatorId = ;
        this.addTime = item.getAddTime();
        this.updateTime = item.getUpdateTime();
        this.del = item.getDel();
        this.allowCreateContractSkipStage = item.getAllowCreateContractSkipStage();
    }
}